import { createRouter, createWebHistory } from 'vue-router';

const files = import.meta.glob('./modules/*.js', {
  eager: true,
});

// 路由暂存
const routeModuleList = [];

// 遍历路由模块
Object.keys(files).forEach((key) => {
  const module = files[key].default || {};
  const moduleList = Array.isArray(module) ? [...module] : [module];
  routeModuleList.push(...moduleList);
});

// 存放动态路由
const asyncRouterList = [...routeModuleList];

// 存放固定路由
const defaultRouterList = [];

const routes = [...defaultRouterList, ...asyncRouterList];

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes,
  scrollBehavior() {
    return {
      el: '#app',
      top: 0,
      behavior: 'smooth',
    };
  },
});

// 路由拦截:路由前置守卫函数
// 无 next() 方式
// router.beforeEach((to, from) => {
//   // 无放行函数的时候
//   // 主要通过return 的返回值来实现对页面的跳转管理
//   // return false; // 表示阻止页面跳转
//   // return true; // 表示开始页面跳转
//   // 条件控制一样
//   if (to.path === '/') {
//     return true;
//   } else {
//     if (localStorage.getItem('token')) {
//       return true;
//     } else {
//       return '/'; // 返回值如果是一个地址,那就代表跳转到对应的页面
//     }
//   }
// });

router.beforeEach((to, from, next) => {
  // 一旦存在next() 则必须调用至少一次,否则无法使用  无页面显示
  // 默认调用就和没有权限一样
  // next();
  // 通过条件判断决定 next() 是否可以调用,以及如何使用
  // 用户是否存在token
  // console.log(to, from, next);
  if (to.path === '/') {
    next();
  } else {
    // 有token ,则可以访问
    // 无token , 则不可访问
    console.log(localStorage.getItem('token'));
    if (localStorage.getItem('token')) {
      next();
    } else {
      // next() 参数格式与全局useRouter拿到的路由示例的push函数类似
      next('/'); // 无token,不允许访问,且返回登录页面
      //
    }
  }
});
export default router;
